package com.ahwei.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Duration;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;

/**
 * @author：ahwei163@qq.com
 * Email: @qq1632957243
 * @date: 202*-01-13 14:58
 * @description: 日期工具类！
 */
public class DateUtils {
    /**
     * 日期字符串格式
     */
    private static final String format = "yyyy-MM-dd";
    //yyyy-MM-dd HH:mm:ss
    private static final ThreadLocal<SimpleDateFormat> fmt = ThreadLocal.withInitial(
            () -> new SimpleDateFormat(format)
    );

    /**
     * 将字符串解析为日期对象,如果解析失败,返回null
     * @param str 日期字符串
     * @return Date
     */
    public static Date stringDate(String str) {
        try {
            return fmt.get().parse(str);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 将日期格式化为字符串
     * @param date 日期
     * @return 字符串
     */
    public static String dateString(Date date) {
        return fmt.get().format(date);
    }
    /**
     * 将LocalDate类型的时间转换为字符串
     * @param localDate 本地日期
     * @return 字符串
     */
    public static String localDateString(LocalDate localDate){
        DateTimeFormatter df = DateTimeFormatter.ofPattern(format);
        return localDate.format(df);
    }
    /**
     * 将String类型的时间转换为LocalDate
     * @param localDate 本地日期字符串
     * @return 本地日期
     */
    public static LocalDate stringLocalDate(String localDate){
        DateTimeFormatter df = DateTimeFormatter.ofPattern(format);
        return LocalDate.parse(localDate,df);
    }
    /**
     * 将LocalDateTime类型的时间转换为字符串
     * @param localDateTime 本地日期时间
     * @return 本地日期时间字符串
     */
    public static String localDateTimeString(LocalDateTime localDateTime){
        DateTimeFormatter df = DateTimeFormatter.ofPattern(format);
        return localDateTime.format(df);
    }
    /**
     * 将String类型的时间转换为LocalDateTime
     * @param localDateTime 本地日期时间字符串
     * @return 本地日期时间
     */
    public static LocalDateTime stringLocalDateTime(String localDateTime){
        DateTimeFormatter df = DateTimeFormatter.ofPattern(format);
        return LocalDateTime.parse(localDateTime,df);
    }

    /**
     * 获取当前本地日期时间
     * @return 本地日期时间
     */
    public static LocalDateTime getLocalDateTimeNow(){
         return LocalDateTime.now();
    }
    /**
     * 获取当前日期
     * @return 日期
     */
    public static Date getDateNow(){
        return new Date();
    }
    /**
     * 获取两个时间的时间差（天）
     */
    public static long getTimeDifference(LocalDateTime time1,LocalDateTime time2){
        Duration duration= Duration.between(time1,time2);
        return duration.toDays();
    }
/**
     * 获取时间 小时:分;秒 HH:mm:ss
     *
     * @return
     */
    public static String getTimeShort() {
        SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");
        Date currentTime = new Date();
        String dateString = formatter.format(currentTime);
        return dateString;
    }




    /**
     * 得到现在小时
     */
    public static String getHour() {
        Date currentTime = new Date();
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String dateString = formatter.format(currentTime);
        String hour;
        hour = dateString.substring(11, 13);
        return hour;
    }

    /**
     * 得到现在分钟
     *
     * @return
     */
    public static String getTime() {
        Date currentTime = new Date();
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String dateString = formatter.format(currentTime);
        String min;
        min = dateString.substring(14, 16);
        return min;
    }


    /**
     * 二个小时时间间的差值,必须保证二个时间都是"HH:MM"的格式，返回字符型的分钟
     */
    public static String getTwoHour(String st1, String st2) {
        String[] kk = null;
        String[] jj = null;
        kk = st1.split(":");
        jj = st2.split(":");
        if (Integer.parseInt(kk[0]) < Integer.parseInt(jj[0]))
            return "0";
        else {
            double y = Double.parseDouble(kk[0]) + Double.parseDouble(kk[1]) / 60;
            double u = Double.parseDouble(jj[0]) + Double.parseDouble(jj[1]) / 60;
            if ((y - u) > 0)
                return y - u + "";
            else
                return "0";
        }
    }

    /**
     * 得到二个日期间的间隔天数
     */
    public static String getTwoDay(String sj1, String sj2) {
        SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");
        long day = 0;
        try {
            Date date = myFormatter.parse(sj1);
            Date mydate = myFormatter.parse(sj2);
            day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000);
        } catch (Exception e) {
            return "";
        }
        return day + "";
    }
}
